iT邦幫忙

2025 iThome 鐵人賽

DAY 22
0
佛心分享-IT 人自學之術

OpwnCV影像處理新手村系列 第 22

🚀 DAY 22:特徵點檢測(Feature Detection)|Harris Corner、Shi-Tomasi

  • 分享至 

  • xImage
  •  

在電腦視覺中,特徵點(Feature Points) 是影像中具有代表性的位置,例如角落(Corners)、邊緣交會點。這些特徵點常被用來做 影像對齊、物件追蹤、3D 重建 等應用。
特徵點的選取對於後續的影像分析、物件辨識、運動估計等任務有關鍵影響。

今天我們來認識兩種經典的特徵檢測方法:

  • Harris Corner Detector
  • Shi-Tomasi Corner Detector (Good Features to Track)

🖼 測試圖片準備

準備一張圖片 image.jpg,放在與程式同一資料夾。

import cv2
import numpy as np

# 讀取影像並轉灰階
img = cv2.imread("image.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

cv2.imshow("Original", gray)

# 將以下程式碼放在所有顯示語句的最後面
cv2.waitKey()
cv2.destroyAllWindows()

說明:
灰階影像能簡化計算,並保留角點偵測所需的亮度資訊。
在特徵點檢測前,通常會先進行去雜訊(如高斯模糊),以提升檢測品質。

原圖灰階


📌 Harris Corner Detector

Harris 角點偵測基於灰階影像的梯度變化,當區域內同時在 x 與 y 方向 變化大時,該點就可能是「角點」。
此方法會計算每個像素周圍的梯度,並根據特定公式判斷是否為角點。

主要參數說明

  • blockSize:計算角點時考慮的鄰域大小。
  • ksize:Sobel 算子的大小,用於計算影像梯度。
  • k:Harris 角點偵測的自由參數,通常介於 0.04~0.06。

程式範例

img_harris = img.copy()

# Harris 角點檢測
gray_harris = np.float32(gray)
dst = cv2.cornerHarris(gray_harris, blockSize=2, ksize=3, k=0.04)

# 擴展角點顯示結果
dst = cv2.dilate(dst, None)

# 閾值處理,標記角點(紅色)
img_harris[dst > 0.01 * dst.max()] = [0, 0, 255]
cv2.imshow("Harris Corners", img_harris)

補充說明:
Harris 方法對雜訊較敏感,可能會偵測到非理想角點。可透過調整參數或前處理(如模糊)改善結果。

角點偵測Harris


📌 Shi-Tomasi Corner Detector (Good Features to Track)

Shi-Tomasi 改進了 Harris 的判斷條件,挑選出更「好追蹤」的角點。
這個方法也是 OpenCV 中 cv2.goodFeaturesToTrack() 的核心,常用於物件追蹤、光流估計等。

主要參數說明

  • maxCorners:最多要偵測多少個角點。
  • qualityLevel:角點品質的最低門檻(0~1),越高則只保留更明顯的角點。
  • minDistance:角點間的最小距離,避免角點過於密集。

程式範例

img_shi = img.copy()

# 使用 Shi-Tomasi 偵測角點
corners = cv2.goodFeaturesToTrack(gray, maxCorners=50, qualityLevel=0.01, minDistance=10)
corners = corners.astype(int)

# 在原圖上畫出角點
for i in corners:
    x, y = i.ravel()
    cv2.circle(img_shi, (x, y), 4, (0, 255, 0), -1)
cv2.imshow("Shi-Tomasi Corners", img_shi)

補充說明:
Shi-Tomasi 方法能有效排除雜訊,挑選出更適合追蹤的角點,常用於物件追蹤與運動分析。

角點偵測Shi-Tomasi


🔍 方法比較

方法 優點 缺點 適用場景
Harris 計算簡單,速度快 雜訊多,角點品質參差不齊 影像匹配、粗略偵測
Shi-Tomasi 角點品質高,適合追蹤 參數需調整,速度略慢 物件追蹤、光流估計

說明:
Harris 強調角點的數學特性,結果可能比較多雜訊。
Shi-Tomasi 更適合做「追蹤」用途,挑出的角點品質更佳。
實務上可根據需求選擇合適方法,或搭配其他特徵描述子(如 SIFT、ORB)提升效果。


🎯 今日結語

  1. 特徵點是影像匹配、追蹤、辨識的基礎,後續會進一步學習 SIFT、ORB、SURF 等進階方法。
  2. Harris 與 Shi-Tomasi 都是經典的角點偵測演算法,各有優缺點。
  3. 角點偵測結果會受影像品質、雜訊、參數設定影響,建議多做實驗並觀察結果。
  4. 特徵點檢測是電腦視覺領域的重要基礎,廣泛應用於各種場景。

上一篇
🎯 DAY 21:霍夫轉換圓檢測(Hough Circle Transform)
系列文
OpwnCV影像處理新手村22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言